package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;

/**
 * @author By ZengPeng
 */
public class 力扣_844_比较含退格的字符串 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_844_比较含退格的字符串().backspaceCompare("ab#c","ad#c"));
        System.out.println(new 力扣_844_比较含退格的字符串().backspaceCompare("ab##","c#d#"));
        System.out.println(new 力扣_844_比较含退格的字符串().backspaceCompare("a#c","b"));
        System.out.println(new 力扣_844_比较含退格的字符串().backspaceCompare("###ab#c","ad#c"));
    }

    /**
    题目：给定 s 和 t 两个字符串，当它们分别被输入到空白的文本编辑器后，如果两者相等，返回 true 。# 代表退格字符。
     注意：如果对空文本输入退格字符，文本继续为空。

     示例 1：
     输入：s = "ab#c", t = "ad#c"
     输出：true
     解释：s 和 t 都会变成 "ac"。

     示例 2：
     输入：s = "ab##", t = "c#d#"
     输出：true
     解释：s 和 t 都会变成 ""。

     示例 3：
     输入：s = "a#c", t = "b"
     输出：false
     解释：s 会变成 "c"，但 t 仍然是 "b"。

    分析：【P 💕💞】
       1.双指针：从后面往前退位，记录需要退位的数量  【太恶心了，我自己都不想看自己代码了】
            --执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户
     
    边界值 & 注意点：
       1.
     **/
    public boolean backspaceCompare(String s, String t) {
        int left=s.length()-1,right=t.length()-1,ln=0,rn=0;
        while (left>-1 || right>-1){
            if(s.charAt(left)=='#'){
                ln++;left--;
            }else if(ln>0 ){
                ln--;left--;continue;
            }
            if(t.charAt(right)=='#'){
                rn++;right--;
            }else if(rn>0 ){
                rn--;right--;continue;
            }
            if(ln==0 && rn==0){
                if(s.charAt(left)!=t.charAt(right))
                    return false;
                else {
                    left--;right--;
                }
            }
        }
        if (getxxx(s, left, ln)) return false;
        return !getxxx(t, right, rn);
    }

    private boolean getxxx(String s, int left, int ln) {
        while (left>=0){
            if(s.charAt(left)=='#'){
                ln++;left--;
            }else if(ln>0 ){
                ln--;left--;
            }else {
                return true;
            }
        }
        return false;
    }
}
